from libmambapy import cancel_json_output
from pygame.examples.music_drop_fade import music_file_list


def change_int(a):
    a = 10


a = 2
change_int(a)
print('a=', a)


def change_me(my_list):  # 修改传入的列表
    my_list.append([1, 2, 3, 4])
    print('函数内取值:', my_list)
    return


my_list = [10, 20, 30]
change_me(my_list)
print('函数外取值:', my_list)


# 位置参数
def print_me(a, b, c):
    print(a, b, c)


print_me(1, 2, 3)


# 默认参数
def print_info(name, age=35):  # 定义函数，打印任何传入的字符串
    print('名字', name)
    print('年龄', age)
    return


# 调用 print_info 函数
print(print_info.__defaults__)  # 输出函数默认值参数
print('root', 50)
print('--------------')
print_info('root')  #   使用默认值参数


def demo(new_item, old_list=[]):
    old_list.append(new_item)
    return old_list


print(demo('5', [1, 2, 3, 4]))
print(demo('a'))
print(demo('b'))

a = 1


def f(n=a):
    print(a)


a = 5
f()


# 关键字参数
def print_info(name, age):  # 定义函数，打印任何传入的字符串
    print('名字:', name)
    print('年龄', age)
    return


# 调用 print_info 函数
print_info(age=50, name='run oob')


# 可变参数
def f(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)


f(1, 2, 3, 4, 5, 6, 7, 9, z=10, y=11)


# 函数的嵌套
def print_line():  # 定义print_line()  函数
    print('***************')

    def print_text():  # 嵌套定义print_text()函数
        print('hello world!')

    print_text()  # 调用print_text() 函数


print_line()  # 调用print_line() 函数


def fac(k):  # 定义fac函数，计算阶乘
    i = 2
    t = 1
    while i <= k:
        t *= i
        i = i + 1
    return t


def sum(n):
    s = 0
    i = 1
    while i <= n:
        s = s + fac(i)
        i += 1
    return s


print('1!+2！+3！+4！+5！+6！+7！+8！+9！+10!=', sum(10))  # 调用sum函数


# 递归函数

def f(n):
    if n == 1:
        return 1
    else:
        return f(n - 1) * n


n = int(input('请输入一个正整数:'))  # 输入一个整数
print(n, 'n的阶乘结果为:', f(n))  # 调用函数f并输出结果

# 局部变量 全局变量
total = 0  # 全局变量


def sum(arg1, arg2):  # 返回2个参数的和
    total = arg1 + arg2  # 局部变量total
    print('函数内是局部变量:', total)  # 输出局部变量total
    return total


sum(10, 20)  # 调用sum函数
print('函数外是全局变量:', total)  # 输出全局变量total的值

# global
num = 1


def fun():
    global num  # 使用global关键字声明为全局变量
    num += 1
    print('函数内num的值为,', num)


fun()
print('函数外num的值为', num)


def outer():
    num = 1

    def inner():
        nonlocal num  # nonlocal  关键字声明
        num = 2
        print('inner函数中num的值为', num)

    inner()
    print('outer函数中num的值为', num)


outer()

sum = lambda arg1, arg2: arg1 + arg2  # 定义lambda函数
print('相加后的值：', sum(10, 20))  # 调用sum函数

stu = [
    {'num': '201801', 'name': ['Wang wu'], 'score': 89},
    {'num': '201802', 'name': ['Liu mei'], 'score': 95},
    {'num': '201803', 'name': ['Ling mei'], 'score': 85}
]
stu.sort(key=lambda x: x['score'])
for s in stu:
    print('学号:', s['num'], '姓名：', s['name'], '成绩:', s['score'])
for s in stu:
    print('学号:', s['num'], '姓名：', s['name'], '成绩：', s['score'])  # 输出列表


def minimal(x, y):  # 自定义计算较小值函数
    if s > y:
        return y
    else:
        return x


import test
"""
a = float(input('请输入第一个数据'))
b = float(input('请输入第二个数据'))
c = test.minimal(a, b)  # 调用函数，将较小的值赋给c
print('较小的值为:', c)  # 输出c的值
"""

# 哥德巴赫猜想
def prime(i):  # 定义函数，判断i是否为素数
    if i <= 1:  # 如果小于等于1，返回0(i不是素数)
        return 0
    if i == 2:  # 如果等于2，返回1
        return 1
    for j in range(2, i):  # 判断i是否为素数
        if i % j == 0:  # i 可以被除尽,余数为0
            return 0  # 返回0，i不是素数
        elif i != j + 1:
            continue
        else:
            return 1


n = 0
for i in range(6, 21, 2):
    k = 2
    while k <= i / 2:
        j = i - k
        flag_1 = prime(k)  # 调用Prime函数
        if flag_1:
            flag_2 = prime(j)
            if flag_2:
                print(i, '=', k, '+', j)  # 输出结果
                n += 1
        k = k + 1

# 学生管理系统
stu_infos = []     # 存储学生的所有信息
def print_menu():
    print('='*20)
    print('学生管理系统 V1.0')
    print('1.添加学生的信息')
    print('2.删除学生的信息')
    print('3.显示所有学生的信息')
    print('0.退出系统')
    print('='*20)

# 添加一个学生信息
def add_stu_info():
    new_num = input('请输入新学生的学号:')    # 获取学生学号
    new_name = input('请输入新学生的姓名:')   # 获取学生名字
    new_sex  = input('请输入新学生的性别(男/女)：')  # 提示并获取学生的性别
    new_info={}        # 定义字典

    # 赋值
    new_info['num'] = new_num
    new_info['name'] = new_name
    new_info['sex'] =new_sex
    stu_infos.append(new_info)    # 将元素添加到列表中

    # 删除一个学生信息
    def del_stu_info(student):
        del_num =input('请输入要删除的学生的学号:')  # 提示并获取学生的学号
        for stu in student:          # 遍历列表
            if stu['num'] == del_num:    # 判断是否与输入的学号相同
                student.remove(stu)        #  删除该学生信息

    # 显示所有的学生信息

    def show_stu_info():
        print('='*20)
        print('学生的信息如下:')
        print('='*20)
        print('序号 学号 姓名 性别')
        i =1
        # 遍历存储学生信息的列表，输出每个学生的详细信息
        for temp_info in stu_infos:
            print('%d   %s   %s    %s'% (i,temp_info['num'],temp_info['name'],temp_info['sex']))
            i +=1
    # main 函数控制整个程序的流程
    def main():
        while True:
            print_menu()   # 打印功能菜单
            key = input('请输入功能对应的数字')  # 获取用户输入
            if key == '1':
                add_stu_info()      # 添加学生信息
            if key == '2':
                del_stu_info()      # 删除学生信息
            elif key == '3':
                show_stu_info()     # 显示学生信息
            elif key == '0':        # 退出循环
                quit_con =input('确定退出吗？(Yes or No)')
                if quit_con == 'Yse':
                    break
    main()
